/****************************************************************************
 * 2024.1 超萌大脑斧
 ****************************************************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using QAssetBundle;
using UnityEngine;
using UnityEngine.UI;
using QFramework;
using UnityEngine.U2D;
using Random = UnityEngine.Random;

namespace QFramework.Example
{
	/// <summary>
	/// 超级武器面板，当拾取了超级武器宝箱，会弹出来
	/// </summary>
	public partial class TreasureChestPanel : UIElement,IController
	{
		private ResLoader mResLoader;
		private SpriteAtlas iconAtlas;
		
		private void Awake()
		{
			mResLoader = ResLoader.Allocate();
			iconAtlas = mResLoader.LoadSync<SpriteAtlas>("Icon");
			BtnSure.onClick.AddListener(() =>
			{
				Time.timeScale = 1.0f;
				this.Hide();
			});
		}

		private void OnEnable()
		{
			// 1.判断是否有匹配的，没合成的
			
			// 2.判断是否有没升级完的
			var expUpgredeSystem = this.GetSystem<ExpUpgradeSystem>();

			var matchedPairedItems = expUpgredeSystem.Items.Where(item =>
			{
				// 只有当武器等级达到7级的时候，才会开启超级武器
				if (item.CurrentLevel.Value>=7)
				//if (item.CurrentLevel.Value >= 1&&item.PairedIconName.IsNotNullAndEmpty())
				{
					// 超级武器组合列表中是否有该武器的配置
					var containsInPair = expUpgredeSystem.Pairs.ContainsKey(item.Key);
					var pairedItemKey = expUpgredeSystem.Pairs[item.Key];
					
					// 超级武器组合列表中，该武器配置对应的另一个合成武器是否已经解锁，等级>0则视为已解锁
					var pairedItemStartUpgrede = expUpgredeSystem.Dictionary[pairedItemKey].CurrentLevel.Value > 0;
					// 当前武器的超级模式是否解锁
					var pairedUnlocked = expUpgredeSystem.PairedProperties[item.Key].Value;

					// 只有当该武器有超级武器配置，且另一个配对武器也已经解锁，且当前超级武器未解锁时，才筛选出去
					return containsInPair && pairedItemStartUpgrede && !pairedUnlocked;
				}

				return false;
			});

			if (matchedPairedItems.Any())
			{
				// 进入超级武器生成模式
				var item = matchedPairedItems.ToList().GetRandomItem();
				Content.text = "<b>" + item.PairedName + "</b>\n"+item.PairedDescription;
				Icon.sprite = iconAtlas.GetSprite(item.PairedIconName);
				Icon.Show();

				// 如果该武器还没升级到顶级，则给升级到顶级
				while (!item.UpgradeFinish)
				{
					item.Upgrade();
				}

				expUpgredeSystem.PairedProperties[item.Key].Value = true;
			}
			else
			{
				// 没超级武器模式则进入普通筛选模式
				// 筛选出玩家已经升级的技能，从中随机一个座位宝箱的升级效果
				var upgradeItems=expUpgredeSystem.Items.Where(item => item.CurrentLevel.Value > 0 && !item.UpgradeFinish).ToList();

				if (upgradeItems.Any())
				{
					var item = upgradeItems.GetRandomItem();
					Content.text = item.Description;
					Icon.sprite = iconAtlas.GetSprite(item.IconName);
					Icon.Show();
					item.Upgrade();
				}
				else
				{
					// 如果玩家没有进行任何技能升级，则恢复血量或添加金币
					if (Global.HP.Value<Global.MaxHP.Value)
					{
						if (Random.Range(0,1.0f)<0.2f)
						{
							Content.text = "恢复 1 血量";
							AudioKit.PlaySound(Sfx.HP);
							Global.HP.Value++;
							Icon.Hide();
							return;
						}

						Content.text = "增加 50 金币";
						Global.Coin.Value += 50;
						Icon.Hide();
					}
				}
			}
		}

		protected override void OnBeforeDestroy()
		{
			mResLoader.Recycle2Cache();
			mResLoader = null;
		}

		public IArchitecture GetArchitecture()
		{
			return Global.Interface;
		}
	}
}